package com.fzq.utils;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

/**
 * 文件名编码工具（兼容低版本Spring）
 */
public class LegacyFilenameEncoder {

    /**
     * 编码文件名用于Content-Disposition头部
     * 兼容Spring 4.x及以下版本
     */
    public static String encodeFilename(String filename) {
        if (filename == null || filename.trim().isEmpty()) {
            return "attachment; filename=\"download\"";
        }

        try {
            // 对文件名进行URL编码
            String encoded = URLEncoder.encode(filename, "UTF-8")
                    .replaceAll("\\+", "%20");

            return "attachment; filename=\"" + encoded + "\"";

        } catch (UnsupportedEncodingException e) {
            // UTF-8编码失败，使用回退方案
            return "attachment; filename=\"" + escapeQuotes(filename) + "\"";
        }
    }

    /**
     * 转义文件名中的特殊字符
     */
    private static String escapeQuotes(String filename) {
        return filename.replace("\"", "\\\"");
    }

    /**
     * 生成安全的下载文件名
     */
    public static String sanitizeFilename(String originalFilename, String targetFormat) {
        if (originalFilename == null || originalFilename.trim().isEmpty()) {
            return "converted." + targetFormat;
        }

        // 提取基本文件名（不含扩展名）
        String baseName = originalFilename;
        int lastDotIndex = originalFilename.lastIndexOf(".");
        if (lastDotIndex > 0) {
            baseName = originalFilename.substring(0, lastDotIndex);
        }

        // 移除可能引起问题的字符
        baseName = baseName.replaceAll("[\\\\/:*?\"<>|]", "_");

        // 如果文件名为空，使用默认名称
        if (baseName.trim().isEmpty()) {
            baseName = "converted";
        }

        return baseName + "." + targetFormat;
    }
}